package com.yc.jpyy.batch.controller;

import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;

import javax.servlet.http.HttpServletRequest;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import com.alibaba.fastjson.JSON;
import com.common.utils.manydatasource.HandlerDataSource;
import com.yc.jpyy.base.bean.RestResponse;
import com.yc.jpyy.base.controller.BaseController;
import com.yc.jpyy.batch.service.BatchService;
import com.yc.jpyy.utils.Tools;




@Controller
@RequestMapping(value = "/batch")
@Scope("prototype")
public class BatchController extends BaseController {
	
	@Autowired
	private BatchService batchService;
    private static Logger logger = LoggerFactory.getLogger(BatchController.class);
	
    //新增
	@SuppressWarnings("finally")
	@RequestMapping(value = "/addBatch", method = { RequestMethod.GET,
			RequestMethod.POST }, produces = "application/json; charset=utf-8")
	public @ResponseBody String addBatch(HttpServletRequest request) throws UnsupportedEncodingException {
		
		RestResponse response = new RestResponse(Optional.ofNullable(request.getAttribute("pubKey")).orElse(""));
		
		try{
			String info = request.getParameter("info");
			System.out.println("info"+info);
			//设置数据源
			Map<String,Object> paramsMap = Tools.JsonToMap(info);
			System.out.println("paramsMap"+paramsMap);
			String dbcode = paramsMap.get("dbcode").toString();
		    HandlerDataSource.setDataSource(dbcode);
		    batchService.addBatchService(paramsMap);
			logger.info("新增成功");
			response.setReturnMsg(1, "操作成功");
			return response.toJSON();
			
		} catch (Exception e) {
			logger.error("新增二保成功处理异常" + e.toString());
			// 异常信息
			response.setReturnCode(0);
			response.setReturnMsg("操作失败");
			response.setReturnException(e.toString());
			e.printStackTrace();
		}
		
		finally {
			HandlerDataSource.clear();
			return response.toJSON();
		}
		
	}
	
	//查询单条
		@SuppressWarnings("finally")
		@RequestMapping(value = "/findBatchByID", method = { RequestMethod.GET,
				RequestMethod.POST }, produces = "application/json; charset=utf-8")
		public @ResponseBody String findBAndWByID(HttpServletRequest request) throws UnsupportedEncodingException {

			RestResponse response = new RestResponse(Optional.ofNullable(request.getAttribute("pubKey")).orElse(""));
			try {
				String info = request.getParameter("info");
				Map<String,Object> paramsMap = Tools.JsonToMap(info);
				System.out.println("paramsMap"+paramsMap);
				String dbcode = paramsMap.get("dbcode").toString();
			    HandlerDataSource.setDataSource(dbcode);
				
				
				//设置数据源
				HandlerDataSource.setDataSource(dbcode);
				Map<String, Object> val = batchService.findBatchByIdService(paramsMap);
				int retSize = val.size();
				if(retSize==0) {
		            response.setReturnMsg(1, "无查询数据");
					return response.toJSON();
				}
				else {
					 response.setReturnMsg(1, "查询单条数据成功");
					
					 response.setListData(val);
					 return response.toJSON();
				}
				
			} catch (Exception e) {
	            logger.error("查询单条数据异常" + e.toString());
				// 异常信息
	            response.setReturnException(e.toString());
				response.setReturnCode(0);
				response.setReturnMsg("查询单条数据异常");

			} finally {
				HandlerDataSource.clear();
				return response.toJSON();
			}
		}
	  //删除处理 物理删除
		@SuppressWarnings("finally")
	@RequestMapping(value = "/delBatch", method = { RequestMethod.GET,
			RequestMethod.POST }, produces = "application/json; charset=utf-8")
	public @ResponseBody String delBatch(HttpServletRequest request) throws UnsupportedEncodingException {
		
		RestResponse response = new RestResponse(Optional.ofNullable(request.getAttribute("pubKey")).orElse(""));
		try{
			String info = request.getParameter("info");
			System.out.println("info"+info);
			Map<String,Object> paramsMap = Tools.JsonToMap(info);
			System.out.println("paramsMap"+paramsMap);
			String ids = paramsMap.get("ids").toString();
			String[] idarray = ids.split(",");
			paramsMap.put("idarray", idarray);
			String dbcode = paramsMap.get("dbcode").toString();
		    //设置数据源
			HandlerDataSource.setDataSource(dbcode);
			response = batchService.delBatchService(paramsMap,response);
		} catch (Exception e) {
			logger.error("删除异常" + e.toString());
			// 异常信息
			response.setReturnCode(0);
			response.setReturnMsg("操作失败");
			response.setReturnException(e.toString());
			e.printStackTrace();
		}
		
		finally {
			HandlerDataSource.clear();
			return response.toJSON();
		}
		
	}
	//修改
	@SuppressWarnings("finally")
	@RequestMapping(value = "/updateBatch", method = { RequestMethod.GET,
			RequestMethod.POST }, produces = "application/json; charset=utf-8")
	public @ResponseBody String updateBatch(HttpServletRequest request) throws UnsupportedEncodingException {
		
		RestResponse response = new RestResponse(Optional.ofNullable(request.getAttribute("pubKey")).orElse(""));
		
		try{
			String info = request.getParameter("info");
			System.out.println(info);
			Map<String,Object> paramsMap = Tools.JsonToMap(info);
			String dbcode = paramsMap.get("dbcode").toString();
			//设置数据源
		    HandlerDataSource.setDataSource(dbcode);
		    batchService.updateBatchService(paramsMap);
			response.setReturnMsg(1, "操作成功");
			return response.toJSON();
			
		} catch (Exception e) {
			logger.info("修改违章处理异常" + e.toString());
			// 异常信息
			response.setReturnCode(0);
			response.setReturnMsg("操作失败");
			e.printStackTrace();
		}
		
		finally {
			HandlerDataSource.clear();
			return response.toJSON();
		}
		
	}
	
	/**
	 * 分页查询
	 * 
	 * @param request
	 * @return
	 * @throws UnsupportedEncodingException
	 */
	@SuppressWarnings("finally")
	@RequestMapping(value = "/findBatch", method = { RequestMethod.GET,
			RequestMethod.POST }, produces = "application/json; charset=utf-8")
	public @ResponseBody String findBatch(HttpServletRequest request) throws UnsupportedEncodingException {
		request.setCharacterEncoding("UTF-8");
		Map<String,Object> resultMap = new HashMap<>();
		try {
			String dataAcquisition= request.getParameter("info");
			Map<String,Object> paramsMap = Tools.JsonToMap(dataAcquisition);
			String dbcode = paramsMap.get("dbcode").toString();
			HandlerDataSource.setDataSource(dbcode);
			resultMap = batchService.findBatch(paramsMap);
			resultMap.put("pubKey",Optional.ofNullable(request.getAttribute("pubKey")).orElse(""));
		} catch (Exception e) {
			logger.info("findBatch" + e.toString());
			resultMap.put("returnCode", 0);
			resultMap.put("returnMsg", "获取失败");
		} finally {
			HandlerDataSource.clear();
			return JSON.toJSONString(resultMap);
		}
		
	}			
	//查询所有
		@SuppressWarnings("finally")
		@RequestMapping(value = "/findBatchSelect", method = { RequestMethod.GET,
				RequestMethod.POST }, produces = "application/json; charset=utf-8")
		public @ResponseBody String findBatchSelect(HttpServletRequest request) throws UnsupportedEncodingException {

			RestResponse response = new RestResponse(Optional.ofNullable(request.getAttribute("pubKey")).orElse(""));
			request.setCharacterEncoding("UTF-8");
			try {
				String info = request.getParameter("info");
				System.out.println("info"+info);
				Map<String,Object> paramsMap = Tools.JsonToMap(info);
				String dbcode = paramsMap.get("dbcode").toString();
				//设置数据源
				HandlerDataSource.setDataSource(dbcode);
			    List<Map<String, Object>> list = batchService.findBatchSelectService(paramsMap);
	            response.setReturnMsg(1, "操作成功");
	            response.setListData(list);
				return response.toJSON();
	            
			} catch (Exception e) {
				logger.error("findCompany" + e.toString());
				response.setReturnCode(1);
				response.setReturnMsg("查询失败");
				response.setReturnException(e.toString());
			} finally {
				HandlerDataSource.clear();
				return response.toJSON();
			}
		}
		
		
		    //传入多个学员的主键ID,批次ID  返回数据保存结果
			@SuppressWarnings("finally")
			@RequestMapping(value = "/addExamBatch", method = { RequestMethod.GET,
					RequestMethod.POST }, produces = "application/json; charset=utf-8")
			public @ResponseBody String addExamBatch(HttpServletRequest request) throws UnsupportedEncodingException {
				
				RestResponse response = new RestResponse(Optional.ofNullable(request.getAttribute("pubKey")).orElse(""));
				try{
					String info = request.getParameter("info");
					System.out.println("info-----"+info);
					Map<String,Object> paramsMap = Tools.JsonToMap(info);
					System.out.println("paramsMap"+paramsMap);
					//String stuids = paramsMap.get("stuids").toString();
					//System.out.println("stuidsppppppp"+stuids);
					//String[] stuidarray = stuids.split(",");
					//paramsMap.put("stuidarray", stuidarray);
					String dbcode = paramsMap.get("dbcode").toString();
				    //设置数据源
					HandlerDataSource.setDataSource(dbcode);
					int ret = batchService.addExamBatchService(paramsMap);
					if(ret>0) {
						response.setReturnMsg(1, "删除成功");
						return response.toJSON();
					}
					else{
					    response.setReturnMsg(0, "删除失败");
					    return response.toJSON();
					}
					
				} catch (Exception e) {
					logger.error("删除异常" + e.toString());
					// 异常信息
					response.setReturnCode(0);
					response.setReturnMsg("操作失败");
					response.setReturnException(e.toString());
					e.printStackTrace();
				}
				
				finally {
					HandlerDataSource.clear();
					return response.toJSON();
				}
				
			}
			
			/**
			 * 获取批次分配列表
			 * 
			 * @param request
			 * @return
			 * @throws UnsupportedEncodingException
			 */
			@SuppressWarnings("finally")
			@RequestMapping(value = "/getBatchDisatributeList", method = { RequestMethod.GET,
					RequestMethod.POST }, produces = "application/json; charset=utf-8")
			public @ResponseBody String getBatchDisatributeList(HttpServletRequest request) throws UnsupportedEncodingException {
				request.setCharacterEncoding("UTF-8");
				Map<String,Object> resultMap = new HashMap<>();
				try {
					String dataAcquisition= request.getParameter("info");
					Map<String,Object> paramsMap = Tools.JsonToMap(dataAcquisition);
					String dbcode = paramsMap.get("dbcode").toString();
					HandlerDataSource.setDataSource(dbcode);
					resultMap = batchService.getBatchDisatributeList(paramsMap);
					resultMap.put("pubKey",Optional.ofNullable(request.getAttribute("pubKey")).orElse(""));
				} catch (Exception e) {
					logger.info("getBatchDisatributeList" + e.toString());
					resultMap.put("returnCode", 0);
					resultMap.put("returnMsg", "获取失败");
				} finally {
					HandlerDataSource.clear();
					return JSON.toJSONString(resultMap);
				}
				
			}
			
}
